package org.example.service.impl;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.example.mapper.DepartmentMapper;
import org.example.mapper.MenuMapper;
import org.example.pojo.Menu;
import org.example.query.MenuQuery;
import org.example.service.IMenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.*;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author peak
 * @since 2024-12-19
 */
@Service
public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements IMenuService {
    @Autowired
    private MenuMapper menuMapper;
    @Autowired
    private DepartmentMapper departmentMapper;

    @Override
    public List<Menu> tree(Wrapper wrapper) {
        //首先现根据那个MenuQuery查询条件，来得到所有的一级菜单
        //然后再根据一级菜单中是不是有父id
        //然后在进行装配
        List<Menu> firstLevel=new ArrayList<>();
        Map<Long,Menu> mapping=new HashMap<>();
        List<Menu> allMenus=menuMapper.selectList(wrapper);
        allMenus.forEach(menu->{
            //首先创建出一个菜单树
            //先展示出的是一个一级菜单，在一级菜单中可能会有二级菜单
            //在第一步的情况下，先添加一级菜单
            //然后再进行添加二级菜单
            mapping.put(menu.getId(),menu);
            Long parentId=menu.getParentId();
            if(parentId==null) {
                firstLevel.add(menu);
            }
        });
        allMenus.forEach(menu->{
            //这里就要进行添加二级菜单了
            Long parentId=menu.getParentId();
            if(parentId!=null) {
                Menu parentMenu=mapping.get(parentId);
                parentMenu.getChildren().add(menu);
            }
        });
        return firstLevel;
    }
}
